#ifndef DATABLOCK_INFO_H
#define DATABLOCK_INFO_H

#include <QWidget>
#include <QString>
#include <QPixmap>
#include <QHash>
#include <QObject>
#include <QLabel>
#include <QFile>
#include <QStyle>
#include <QMutex>
#include <QPointer>
#include <QJsonObject>
#include <QTimer>
#include <QDebug>
#include "ui_datablock_info.h" // 包含生成的UI头文件
QT_BEGIN_NAMESPACE
namespace Ui
{
    class datablock_info;
}
QT_END_NAMESPACE
struct DataBlock
{
    // 成员变量（带注释说明默认值）
    QString identifier = "0";                  // 本质就是create后返回的句柄,所以这一标识在同一个block下必须具有唯一性
    int id = -1;                               // 默认无效ID
    QString data = "--";                       // 默认数据占位符
    QString position = "未指定位置";           // 默认安装位置
    QString icon_path = ":/icons/default.png"; // 默认图标路径
    QString unit = "";
    QString type;
    // 默认构造函数（显式初始化）
    DataBlock() = default; // C++11 特性，成员已在声明处初始化
    DataBlock(QJsonObject obj)
    {
        identifier = obj["identifier"].toString();
        id = obj["modbusAddr"].toString().toInt();
        position = obj["position"].toString();
        type = obj["type"].toString();
        if (type == "温度")
        {
            icon_path = "./icon/t_blue.svg";
            unit = "°C";
        }
        else if (type == "湿度")
        {
            icon_path = "./icon/h_blue.svg";
            unit = "%";
        }
        else if (type == "超声波")
        {
            icon_path = "./icon/icon_shark.svg"; // 实际的超声波图标路径
            unit = "dBuV";
        }
        else if (type == "暂态地电压")
        {
            icon_path = "./icon/icon_light.svg"; // 实际的暂态地电压图标路径
            unit = "dBmV";
        }
        else
        {
            // 其他类型使用默认图标
            icon_path = ":/icons/default.svg";
            unit = "";
        }

        // icon_path = (obj["type"].toString() == "温度") ? "./icon/t_blue.png" : "./icon/h_blue.png";
        data = obj["data"].toString();
        // // 根据类型设置单位
        // if (obj["type"].toString().contains("温度"))
        // {
        //     unit = "°C";
        // }
        // else if (obj["type"].toString() == "湿度")
        // {
        //     unit = "%RH";
        // }
        // if (obj["type"].toString() == "超声波")
        // {
        //     unit = "dBuV";
        // }
        // if (obj["type"].toString() == "暂态地电压")
        // {
        //     unit = "dBmV";
        // }
        // else
        // {
        //     unit = "";
        // }
    }

    // 添加相等运算符
    bool operator==(const DataBlock &other) const
    {
        return identifier == other.identifier &&
               id == other.id &&
               position == other.position &&
               icon_path == other.icon_path &&
               type == other.type &&
               data == other.data; // 数据内容也在比较范围内*/
    }
};

class datablock_info : public QWidget
{
    Q_OBJECT
    // 使用 int 类型表示状态属性 (1: Offline, 2: Online, 3: Alarm)
    Q_PROPERTY(int status READ status NOTIFY statusChanged)
public:
    explicit datablock_info(QWidget *parent = nullptr);
    ~datablock_info()
    {
        delete ui;
    };
    const DataBlock &blockData() const { return m_data; }

    bool setBlockInfo(const DataBlock &data);
    int id() const { return m_currentId; }

    void setCriticalThreshold(double threshold) { m_criticalThreshold = threshold; }
    // 状态接口，返回 int 类型
    int status() const { return m_status; }

signals:
    void idChanged(int oldId, int newId);
    // void criticalChanged(bool isCritical); // 新增临界状态信号
    void statusChanged(int status);

private:
    Ui::datablock_info *ui = nullptr;
    int m_currentId = -1; // 等于输入的控件id
    DataBlock m_data;

    // 临界状态相关
    int m_status = 1;
    double m_criticalThreshold = 100.0; // 默认临界值
};

#endif // DATABLOCK_INFO_H
